{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fmodern\fprq1\fcharset0 Courier New;}}
{\colortbl ;\red79\green129\blue189;\red0\green128\blue0;\red155\green187\blue89;\red221\green132\blue132;\red0\green0\blue128;\red128\green128\blue0;\red255\green0\blue0;}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang7\b\f0\fs22 Info.rtf\b0\par
2013-09-28 USP\par
\b Design Notes\b0\par
All diatonic note names are defined in the table's \i notes\i0  attribute. This table containes all notes, the ones from the scale, and off-scale notes.\par
The scale notes are defined by a list of intervals, given in the \i scale\i0  attribute.\par
The scale interval names are computed, and don't exceed a major 7th interval.\par
The chord is defined in the \i chord\i0  attribute, specified by the chord root note name, and a list of interval names, which define the chord type, and, indirectly, the chord note.\par
Chord note names are taken from the tables \i notes\i0  attribute.\par
Chord interval names may differ from the interval names on the scale. Additionally, the range may span two octaves (9th, 11th, 13th), so chord interval names must be handled separately from scale interval names.\par
Required values are stored in table, row and cell attributes. Temporary values may be discarded.\par
\b Attributes\b0\par
\pard\sl276\slmult1\cf1 notes\cf0\tab\par
\pard\li1136\sl276\slmult1 C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B\par
D,Eb,E,F,F#,G,Ab,A,Bb,B,C,C#\par
Note names of the diatonic scale. User-defined. The first entry defines the root note of the scale.\par
\pard\li1136\sa200\sl276\slmult1 Lengh: 12.\par
\pard\sl276\slmult1\cf1 scale\par
\pard\li1136\sl276\slmult1\cf0 R, 2, 3, 4, 5, 6, 7\par
\pard\li1136\sa200\sl276\slmult1 User-defined. Determines the scale notes by their interval names.\par
\pard\sl276\slmult1 scaleNoteOffsets\par
\pard\li1136\sl276\slmult1 0, 2, 4, 5, 7, 9, 11\par
\pard\li1136\sa200\sl276\slmult1 Derived from Scale attribute. Offset of a scale note from the scale root note. Length: Same as scale.\par
\pard\sl276\slmult1 scaleNoteNames\par
\pard\li1136\sl276\slmult1 C, , D, , E, F, , G, , A, , B\par
Derived from scaleNoteOffsets. Used to show the scale notes on the fretboard.\par
\pard\li1136\sa200\sl276\slmult1 Length: 12. \par
\pard\sl276\slmult1 scaleIntervalNames\par
\pard\li1136\sl276\slmult1 R, , 2, , 3, 4, , 5, , 6, , 7\par
Derived from ScaleNotes. \par
\pard\li1136\sa200\sl276\slmult1 Length: 12.\par
\pard\sl276\slmult1\cf1 chord\cf0\par
\pard\li1136\sl276\slmult1 D:R, 3, 5, 7\par
User-defined. Root note name and a list of interval names that define the chord. User-defined. First element defines the chord root note (the prime).  Converted into an array of chord interval names:\par
\pard\li1136\sa200\sl276\slmult1 R | 3 | 5 | 7\par
\pard\sl276\slmult1 chordRootNoteName\par
\pard\li1136\sl276\slmult1 D\par
The chord root note name. Derived from the chord attribute.\par
\pard\li1136\sa200\sl276\slmult1 Not used.\par
\pard\sl276\slmult1 chordRootNoteOffset\par
\pard\li1136\sl276\slmult1 4\par
\pard\li1136\sa200\sl276\slmult1 The distance of the chord root note from the scale root note. Derived from chordRootNoteName.\par
\pard\sl276\slmult1 chordNoteOffsets\par
\pard\li1136\sl276\slmult1 0, 4, 7, 11\par
Converted from the Chord attribute. Defines the cord type. Each element defines the offset of the related chord note from the chord root note. \par
\pard\li1136\sa200\sl276\slmult1 Length: same as chord.\par
\pard\sl276\slmult1 chordIntervalNames \par
\pard\li1136\sl276\slmult1 7, , R, , , m3, , , , 5, , \par
Derived from chord. A list of interval names that define the chord on the scale. User-defined. First element defines the chord root note (the prime).\par
\pard\li1136\sa200\sl276\slmult1 Length: 12. \par
\pard\sl276\slmult1 chordNoteNames\par
\pard\li1136\sl276\slmult1 C, , D, , , F, , , , A, , \par
Derived from chord and notes. A list of note names that define the chord on the scale. User-defined. First element defines the chord root note (the prime).\par
Length: 12. \par
\pard\li1136\sa200\sl276\slmult1 To be replaced by chordNoteFlags.\par
\pard\sl276\slmult1 chordNoteFlags\par
\pard\li1136\sl276\slmult1 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0\par
Derived from chord. A list of flags that indicate chord notes on the diatonic scale. \par
\pard\li1136\sa200\sl276\slmult1 Length: 12. \par
\pard\sl276\slmult1\cf1 strings\cf0\par
\pard\li1136\sl276\slmult1 E4, B3, G3, D3, A2, E2\par
\pard\li1136\sa200\sl276\slmult1 User-defined. Specifies number and pitch of the strings. First element is string number 1.  Pitch is determined by octave number and note name.\par
\pard\sl276\slmult1\cf1 markers\cf0\par
\pard\li1136\sl276\slmult1 0,1,3,5,7,9,12\par
3,5,7\par
\pard\li1136\sa200\sl276\slmult1 User-defined. Determines which fret positions are flagged with a fretbord marker, a roman capitals number.\par
\pard\sl276\slmult1\cf1 fretrange\cf0\par
\pard\li1136\sl276\slmult1 3,7\par
0,12\par
\pard\li1136\sa200\sl276\slmult1 User-defined. Determines the range of frets show.\par
\pard\sl276\slmult1\cf1 searchrange\cf0\par
\pard\li1136\sl276\slmult1 4,7\par
3,9\par
\pard\li1136\sa200\sl276\slmult1 Not used. User-defined. Determines the fret ranged where chord notes are searched.\par
\pard\sl276\slmult1\cf1 extinfo\cf0\par
\pard\li1136\sl276\slmult1 intervals,lefthand,steps\par
\pard\li1136\sa200\sl276\slmult1 User-defined. Determines which additional information is shown to the right of the fretboard diagram, and in what order.\par
\pard\sl276\slmult1\cf1 viewmode\cf0\par
\pard\li1136\sl276\slmult1 chord\par
\pard\li1136\sa200\sl276\slmult1 Determines what is shown in the fretboard cells: scale notes, scale intervals, all chord notes in the search range, chord interval names, chord interval length values.\par
\pard\sl276\slmult1\cf1 fretfilter\cf0\par
\pard\li1136\sl276\slmult1 1-0,2-1,3-0,4-2,5-3,6-3\par
0,1,,2,3,3\par
\pard\li1136\sa200\sl276\slmult1 Defines the frets to show in chord mode. Length: same as strings.\par
\pard\sl276\slmult1\cf1 fretfilterMode\cf0\par
\pard\li1136\sl276\slmult1 off | hide | emphasize\par
\pard\li1136\sa200\sl276\slmult1 Hides all fret content except the ones specified in the fretfilter attribute, or emphasizes the chord notes on the fretboard.\par
\pard\sl276\slmult1\cf1 rowheader\cf0\par
\pard\li1136\sl276\slmult1 VI\\nFm7b5 \par
\pard\li1136\sa200\sl276\slmult1 Defines the text in front of the diagram.\par
\pard\sl276\slmult1\cf1 showStringNumbers\cf0\par
\pard\li1136\sl276\slmult1 true | false\par
\pard\li1136\sa200\sl276\slmult1 Determines if the string numbers appear in front of the diagram.\par
\pard\sl276\slmult1\cf1 showStringNames\cf0\par
\pard\li1136\sl276\slmult1 true | false\par
\pard\li1136\sa200\sl276\slmult1 Determines if the string names appear in front of the diagram.\par
\pard\sa200\sl276\slmult1\par
\b Computed Table Attributes\b0\par
\pard\sl276\slmult1\cf1 showStringNames\cf0\par
\pard\li1136\sl276\slmult1 true | false\par
\pard\sa200\sl276\slmult1\par
\b Fret Cell Attributes\b0\par
The following cell attributes are used for display:\par
\pard\sl276\slmult1 FretIndex\par
\pard\li1136\sa200\sl276\slmult1 Offset from zero-fret, fret number.\par
\pard\sl276\slmult1 MidiFileName\par
\pard\li1136\sa200\sl276\slmult1 A basic file name in the form \i octaveIndex.pitchIndex\i0 . Both octave and pitch index are numeric values formatted as two decimal digits to support sorting in file browsers.\par
\pard\sl276\slmult1 NoteName\par
\pard\li1136\sa200\sl276\slmult1 This is the name of the note as it appears on the specified scale.\par
\pard\sl276\slmult1 ScaleRootFlag\par
\pard\li1136\sa200\sl276\slmult1 Indicates that this is the scale root note.\par
\pard\sl276\slmult1 ScaleIntervalName\par
\pard\li1136\sa200\sl276\slmult1 Name of the interval between the fret note and the scale root note. Interval names are user-defined in the table.scale attribute. If this field is empty, the note is not a scale note.\par
\pard\sl276\slmult1 ChordIntervalName\par
\pard\li1136\sa200\sl276\slmult1 Name of the interval between fret note and chord root note. The chord root note can be identified by the name "R" or "1".\par
\pard\sl276\slmult1 ChordRootFlag\par
\pard\li1136\sa200\sl276\slmult1 Indicates the chord root note.\par
\pard\sl276\slmult1 LeftHandFingerName\par
\pard\li1136\sa200\sl276\slmult1 Indicates which finger should be used to fret the note. Usual values are "1" to "4", "0" for the open string, and "T" for the thumb.\par
\pard\sl276\slmult1 RightHandFingerName\par
\pard\li1136\sa200\sl276\slmult1 Indicates which finger to use for picking. Values: "P", "i", "m", "a", "c"\par
\pard\sa200\sl276\slmult1\b\par
Functions\b0\par
noteFromInterval ( scaleRootNote, intervalName )\par
\pard\li568\sa200\sl276\slmult1 var normScale = new Array ( "C", "", "D", "", "E", "F", "", "G", "", "A", "", "B" );\par
???\b\par
\pard\sa200\sl276\slmult1 Computations\b0\par
\pard\sl276\slmult1\cf2 table.notes\par
\pard\li1136\sl276\slmult1\cf0 = table.notes.split( "," );\par
Attribute string converted to array of note names. Contains all 12 notes of the diatonic scale.\par
\pard\li1136\sa200\sl276\slmult1 if not specified, the notes will be derived from the scale and a scale root note.\par
\pard\sl276\slmult1\cf2 scaleRootNote \cf0 (temporary)\par
\pard\li1136\sl276\slmult1 array = table.scale.split ( ":" )\par
if ( array.length == 2 ) scaleRootName = array[ 0 ]\par
\pard\li1136\sa200\sl276\slmult1 The scale definition may be preceded by the scale root note, or not.\par
\pard\sl276\slmult1\cf2 table.scale\par
\pard\li1136\sl276\slmult1\cf0 array = table.scale.split ( ":" )\par
if ( array.length == 2 ) scaleRootName = array[ 1 ].split( "," )\par
else table.scale = table.scale.split ( "," )\par
Attribute string converted to an array of scale interval names.  The interval list \i may \i0 be preceded by the scale root note, seprarated by a colon, or not.\par
\pard\li1136\sa200\sl276\slmult1 Attention: This is a list of interval names, not note names!\par
\pard\sl276\slmult1\cf2 scaleIntervalNames\par
\pard\li1136\sl276\slmult1\cf0 tables.scale converted to array[ 12 ] of interval names\par
\pard\li1136\sa200\sl276\slmult1 scaleIntervalNames [ length ( scale[ i ] ) ] = scale [ i ]\par
\pard\sl276\slmult1\cf2 table.notes\par
\pard\li1136\sa200\sl276\slmult1\cf0 createDiatonicScale ( )\par
\pard\sl276\slmult1\cf2 table.fretrange\cf3\par
\pard\li1136\sl276\slmult1\cf0 = table.fretrange.split( "," )\par
\pard\li1136\sa200\sl276\slmult1 attribute string converted to array of range indices.\par
\pard\sl276\slmult1\cf2 table.chord\par
\pard\li1136\sl276\slmult1\cf0 = table.chord.split ( ":" ) [ 1 ].split( "," )\par
\pard\li1136\sa200\sl276\slmult1 Obtains an array of chord interval names related to the chord root name.\par
\pard\sl276\slmult1\cf2 table.fretfilter\cf3\par
\pard\li1136\sl276\slmult1\cf0 = table.fretfilter.split( "," )\par
attribute string converted to array of fret numbers.\par
\pard\li1136\sa200\sl276\slmult1 Used to hide non-chord frets.\par
\pard\sl276\slmult1\cf2 chordRootNote\cf0\par
\pard\li1136\sa200\sl276\slmult1 = table.chord.split ( ":" ) [ 0 ]\par
\pard\sl276\slmult1\cf2 chordIntervalNames\par
\pard\li1136\sl276\slmult1\cf0 array[ 12 ] of chord interval names. Note that these names differ from scale interval names: Chord interval names related to the chord root note, while scale interval names relate to the scale root note.\par
\pard\li1136\sa200\sl276\slmult1 chordIntervalNames[ ( distance ( table.notes[ 0 ], chordRootNote ) + length ( table.chord[ i ] ) % 12 ] = table.chord[ i ]\par
\pard\sl276\slmult1\cf2 table.strings\cf3\par
\pard\li1136\sl276\slmult1\cf0 = table.strings.split( "," )\par
\pard\li1136\sa200\sl276\slmult1 attribute string converted to array of string names.\par
\pard\sl276\slmult1\par
\cf2 string.name\par
\pard\li1136\sa200\sl276\slmult1\cf0 = table.strings.split ( "," ) [ stringIndex ]\par
\pard\sl276\slmult1\cf2 string.number\par
\pard\li1136\sl276\slmult1\cf0 = currentTableRowIndex - firstStringRowOffset + 1\par
\pard\li1136\sa200\sl276\slmult1 Variables are computed while table is built.\par
\pard\sl276\slmult1\cf2 string.noteName\par
\pard\li1136\sa200\sl276\slmult1\cf0 = string.name.split( "-" ) [ 0 ]\par
\pard\sl276\slmult1\cf2 string.octaveNumber\par
\pard\li1136\sa200\sl276\slmult1\cf0 = string.name.split( "-" ) [ 1 ]\par
\pard\sl276\slmult1 string.LeftHandFingerName\par
\pard\li1136\sl276\slmult1 = table.leftHand.split( "," ) [ string.number - 1 ]\par
\pard\li1136\sa200\sl276\slmult1 Indicates which finger should be used to fret the note. Recommended values are "1" to "4", "T" for the thumb, "O" for the open string, and "X" for an unused string.\par
\pard\sl276\slmult1 string.RightHandFingerName\par
\pard\li1136\sl276\slmult1 = table.rightHand.split( "," ) [ string.number - 1 ]\par
\pard\li1136\sa200\sl276\slmult1 Indicates which finger to use for picking. Recommended values: "P", "i", "m", "a", "c", and "" or "-" for an unplucked string.\par
\pard\sl276\slmult1\cf2 cell.fretNumber\par
\pard\li1136\sl276\slmult1\cf0 = table.fretrange[ 0 ] + current fret column number.\par
\pard\li1136\sa200\sl276\slmult1 Fret column number is maintained during table cell creation, and counts the fret cells, beginning with the zero fret. Nut cell is not counted.\par
\pard\sl276\slmult1\cf2 cell.MidiFileName\par
\pard\li1136\sl276\slmult1\cf0 noteIndex = ( distance ( "C", string.noteName ) + cell.fretIndex ) % 12\par
octaveNumber = string.octaveNumer + ( distance ( "C", string.noteName ) + cell.fretIndex ) div 12\par
\pard\li1136\sa200\sl276\slmult1 cell.MidiFileName = format ( "\{0:2\}-\{1:2\}", octaveNumber, noteIndex )\par
\pard\sl276\slmult1\cf2 cell.scaleNoteName\par
\pard\li1136\sa200\sl276\slmult1\cf0 = table.notes [ ( distance ( table.notes[ 0 ], string.noteName ) + cell.fretIndex ) % 12 ]\par
\pard\sl276\slmult1\cf2 cell.ScaleRootNoteFlag\par
\pard\li1136\sa200\sl276\slmult1\cf0 = NoteName == notes[ 0 ]\par
\pard\sl276\slmult1\cf2 cell.scaleIntervalName\par
\pard\li1136\sa200\sl276\slmult1\cf0 = scaleIntervalNames [ distance ( table.notes[ 0 ], cell.scaleNoteName ) ]\par
\pard\sl276\slmult1\cf2 cell.chordIntervalName\par
\pard\li1136\sa200\sl276\slmult1\cf0 = chordIntervalNames[ distance ( table.notes[ 0 ], cell.scaleNoteName ) ]\par
\pard\sl276\slmult1\cf2 cell.isChordNote\par
\pard\li1136\sl276\slmult1\cf0 = cell.chordIntervalName != &nbsp;\par
\pard\li1136\sa200\sl276\slmult1 Indicates that a cell is a chord note.\par
\pard\sl276\slmult1\cf2 cell.isChordRootNote\par
\pard\li1136\sl276\slmult1\cf0 = cell.chordIntervalName == table.chord[ 0 ]\par
\pard\li1136\sa200\sl276\slmult1 Indicates that a cell is a chord root note.\par
\pard\sa200\sl276\slmult1\par
\b View Modes\b0\par
\pard\sl276\slmult1\cf2 AllNotes\cf0\par
\pard\li710\sa200\sl276\slmult1\tab Shows all notes on the fretboard. Chord notes and chord root note emphasized with color.\par
\pard\sl276\slmult1\cf2 Scale\cf0\par
\pard\li710\sl276\slmult1\tab Shows notes of the scale. Scale root note emphasized with color.\par
\pard\li710\sa200\sl276\slmult1 Chord Notes are neither shown nor indicated.\par
\pard\sl276\slmult1\cf2 ScaleIntervals\cf0\par
\pard\li710\sl276\slmult1\tab Shows scale intervals. Scale root note emphasized with color.\par
\pard\li710\sa200\sl276\slmult1 Chord Notes are neither shown nor indicated.\par
\pard\sl276\slmult1\cf2 Chord\cf0\par
\pard\li710\sa200\sl276\slmult1\tab Shows only notes of the chord indicated by the fret filter. Chord root note is emphasized with color. Scale notes are not shown. \par
\pard\sl276\slmult1\cf2 ChordNotes\cf0\par
\pard\li710\sa200\sl276\slmult1\tab Shows all notes of the chord. Chord root note emphasized with color. Scale notes are not shown. Fretfiltered notes are emphasized to indicated a recommended voicing.\par
\pard\sl276\slmult1\cf2 ChordOverScale\par
\pard\li710\sa200\sl276\slmult1\cf0\tab Shows chord and scale notes. Chord and chord root notes are emphasized with color.\par
\pard\sl276\slmult1\cf2 ChordIntervals\cf0\par
\pard\li710\sa200\sl276\slmult1\tab Shows the intervals of the chord selected by fretfilter. Chord root note emphasized with color. Scale notes are not shown. \par
\pard\sl276\slmult1 ChordExtensions\par
\pard\li710\sa200\sl276\slmult1\tab Shows the intervals of the chord plus possible extensions. Chord (fretfiltered) and chord root notes emphasized with color. Extensions are not emphasized.\par
\pard\sa200\sl276\slmult1\par
\b Hover\b0\par
\pard\sl276\slmult1 AllNotes\par
\pard\li710\sa200\sl276\slmult1\tab Shows all notes on the fretboard. \par
\pard\sl276\slmult1 ScaleNotes\par
\pard\sa200\sl276\slmult1\tab Shows scale notes. \par
\pard\sl276\slmult1 ScaleIntervals\par
\pard\sa200\sl276\slmult1\tab Shows scale intervals. \par
\pard\sl276\slmult1 ChordNotes\par
\pard\sa200\sl276\slmult1\tab Shows chord notes. Chord Root note is emphasized with color.\par
\pard\sl276\slmult1 ChordIntervals\par
\pard\sa200\sl276\slmult1\tab Shows chord intervals. Chord Root note is emphasized with color.\par
\pard\sl276\slmult1 Fingers\par
\pard\sa200\sl276\slmult1\tab Shows left hand fingers. \par
\par
\b Sound Support\b0\par
\pard\sl276\slmult1 soundPath\par
\pard\li710\sa200\sl276\slmult1\tab Path to the sound file directory.\par
\pard\sl276\slmult1 soundPlayer\par
\pard\li710\sl276\slmult1\tab name of the sound player document. \par
\pard\li710\sa200\sl276\slmult1 Default value: soundplayer.htm.\par
\pard\sa200\sl276\slmult1 The sound player document is an html file must be found in the sound path folder:\par
\tab\{soundPath\}/\{soundPlayer\}\par
\pard\sl276\slmult1 soundPrefix\par
\pard\li710\sl276\slmult1\tab Subfolder (instrument dirctory) added to the sound file path.\par
\pard\li710\sa200\sl276\slmult1 Default value: "piano"\par
\pard\sl276\slmult1 soundPostfix\par
\pard\li710\sl276\slmult1\tab extension added to the sound files.\par
\pard\li710\sa200\sl276\slmult1 Default value: ".mp3".\par
\pard\sa200\sl276\slmult1 The path for the sound files is composed as \par
\tab\{soundPath\}/\{soundPrefix\}/\{sound-file-name\}\{soundPostfix\}\par
\pard\sl276\slmult1 Sound file names are provided by the fret cells.\b\par
\par
Examples\b0\par
\par
\pard\li568\sl276\slmult1 Ionian\par
\pard\sl276\slmult1\tx568\tx994\tx1420\tx1846\tx2272\tx2698\tx3124\tx3550\tx3976\tx4402\tx4828\tx5254\tab\i R\tab m2\tab 2\tab m3\tab 3\tab 4\tab d5\tab 5\tab m6\tab 6\tab m7\tab 7\par
\i0\tab Eb\tab\cf1 Fb\cf0\tab F\tab\cf1 Gb\cf0\tab G\tab Ab\tab\cf1 B\cf0\tab Bb\tab\cf1 Cb\cf0\tab C\tab\cf1 Db\cf0\tab D\par
\tab Bb\tab\cf1 Cb\cf0\tab C\tab\cf1 Db\cf0\tab D\tab Eb\tab\cf1 Fb\cf0\tab F\tab\cf1 Gb\cf0\tab G\tab\cf1 Ab\cf0\tab A\par
\tab F\tab\cf1 Gb\cf0\tab G\tab\cf1 Ab\cf0\tab A\tab Bb\tab\cf1 Cb\cf0\tab C\tab\cf1 Db\cf0\tab D\tab\cf1 Eb\cf0\tab E\par
\tab C\tab\cf1 Db\cf0\tab D\tab\cf1 Eb\cf0\tab E\tab F\tab\cf1 Gb\cf0\tab G\tab\cf1 Ab\cf0\tab A\tab\cf1 Bb\cf0\tab B\par
\tab G\tab\cf1 Ab\cf0\tab A\tab\cf1 Bb\cf0\tab B\tab C\tab\cf1 Db\cf0\tab D\tab\cf1 Eb\cf0\tab E\tab\cf1 F\cf0\tab F#\par
\tab D\tab\cf1 Eb\cf0\tab E\tab\cf1 F\cf0\tab F#\tab G\tab\cf1 Ab\cf0\tab A\tab\cf1 Bb\cf0\tab B\tab\cf1 C\cf0\tab C#\par
\tab A\tab\cf1 Bb\cf0\tab B\tab\cf1 C\cf0\tab C#\tab D\tab\cf1 Eb\cf0\tab E\tab\cf1 F\cf0\tab F#\tab\cf1 D\cf0\tab D#\par
\pard\sl276\slmult1\tx568\tx852\tx1136\tx1420\tx1704\tx1988\tx2272\tx2556\tx2840\tx3124\tx3408\tx3692\tx3976\tx4260\tab\par
\pard\li568\sl276\slmult1 Aeolian\par
\pard\sl276\slmult1\tx568\tx994\tx1420\tx1846\tx2272\tx2698\tx3124\tx3550\tx3976\tx4402\tx4828\tx5254\tab\i R\tab m2\tab 2\tab m3\tab 3\tab 4\tab d5\tab 5\tab\cf4 m6\cf0\tab 6\tab m7\tab 7\par
\i0\tab A\tab\cf1 Bb\cf0\tab B\tab C\tab\cf1 C#\cf0\tab D\tab\cf1 Eb\cf0\tab E\tab F\tab\cf1 F#\cf0\tab G\tab\cf1 G#\par
\cf0\tab D\tab\tab E\tab F\tab\tab G\tab\tab A\tab Bb\tab\tab C\tab\par
\pard\sl276\slmult1\tx568\tx852\tx1136\tx1420\tx1704\tx1988\tx2272\tx2556\tx2840\tx3124\tx3408\tx3692\tx3976\tx4260\tab\par
\pard\li568\sl276\slmult1 Phrygian dominant\par
\pard\sl276\slmult1\tx568\tx994\tx1420\tx1846\tx2272\tx2698\tx3124\tx3550\tx3976\tx4402\tx4828\tx5254\tab\i R\tab m2\tab 2\tab m3\tab 3\tab 4\tab d5\tab 5\tab\cf4 m6\cf0\tab 6\tab m7\tab 7\par
\i0\tab E\tab F\tab\tab\tab G#\tab A\tab\tab B\tab C\tab\tab D\tab\cf1\par
\cf0\par
\pard\sa200\sl276\slmult1\b Idea\b0\par
\pard\li284\sl276\slmult1 Interval list: 1, m2, 2, m3, 3, 4, b5, 5, b6, 6, b7, 7.\par
Alternative interval list: 1, m2, 2, m3, 3, 4, #4, 5, b6, 6, b7, 7.\par
Use root note as a starter for the first group. \par
Determine letter for the next group\par
function createNotesFromScale ( scaleRootNote, scaleIntervals )\par
\{\par
var resultNotes = new Array ( scaleRootNote, "", ...(10x)... );\par
// Compute scale note names from given scale intervals.\par
foreach ( var intervalName in scaleIntervals )\par
\{\par
resultNotes[ intervalLength( intervalName ) ] = noteFromInterval( scaleRoot, intervalName );\par
\}\par
// Calculate missing notes from the standard interval list.\par
var standardIntervals = new Array ( "1", "m2", "2", "m3", "3", "4", "b5", "5", "b6", "6", "b7", "7" );\par
for ( var i = 0; i < resultNotes.length; i ++ )\par
\{\par
if ( resultNotes[ i ] == "" )\par
\{\par
resultNotes[ i ] = noteFromInterval( scaleRoot, standardIntervals[ i ] );\par
\}\par
\}\par
return resultNotes;\par
\}\par
\par
function noteFromInterval ( rootnote, intervalName )\par
\{\par
var intervalNumber = parseInt( intervalName.replace( /[mMb#da]/g/, "" ));\par
var notenames = "ABCDEFG";\par
var resultNoteName = notenames [ ( notenames.indexof( rootnote.replace( /[b#]/g/, "" )) + intervalNumber ) % 7 ];\par
var desiredIntervalLength = musicIntervalLength( intervalName );\par
var resultIntervalLength = musicIntervalLength( resultNoteName );\par
while ( resultIntervalLength < desiredIntervalLength ) \{ resultNoteName += "#"; resultIntervalLength += 1; \}\par
while ( resultIntervalLength > desiredIntervalLength ) \{ resultNoteName += "b"; resultIntervalLength -= 1; \}\par
return resultNoteName;\par
\}\par
\par
\par
\pard\sa200\sl276\slmult1\b Fretfilters\b0\par
\pard\li142\sa200\sl276\slmult1 A fretfilter influences content, foreground, and background color of frets. It can be used to help the user to focus on chord frets (by making the non-chord frets empty).\par
The fretfilter attribute has the following syntax:\par
\pard\li426\sa200\sl276\slmult1\cf1 table.fretfilter = "[filterdef[;filterdef]]"\cf0\par
\pard\li142\sa200\sl276\slmult1 with\par
\pard\li426\sa200\sl276\slmult1\cf1 filterdef ::= active,fgcolor,bgolor,fretnumber[,fretnumber]...\cf0\par
\pard\li142\sa200\sl276\slmult1 The active attribute defines whether the filterdef is active, or not. An active filterdef defines the foreground and background color of the fret cells specified at the end of the definition.\par
A fretnumber defines a single fret on a string. Each fretnumber is related to one of the strings, so it is expected that there are no more fretnumbers than strings.\par
\b Internal representation\b0\par
The definition string is turned into an array and stored in the table.fretfilters member.\par
\b Algorithm\b0\par
Two functions are assigned to the table:\par
\pard\li426\sl276\slmult1\cf1 deactivateFretfilter  ( n )\cf0  \par
\pard\li426\sa200\sl276\slmult1\cf1 activateFretfilter ( n )\cf0\par
\pard\li142\sa200\sl276\slmult1 The functions loop through the string rows, determine the specified fret cell, and apply the specified attributes.\par
\pard\sa200\sl276\slmult1\b Findings\b0\par
\pard\li142\sa200\sl276\slmult1 1. When defining objects, the methods are parsed, and executed. References to undefined objects cause loading the code to fail. Example:\par
\pard\li284\sl276\slmult1\tx568\tx852\tx1136\tx1420\tx1704\cf5\f1\fs18 var music = new function ( )\par
\{\tab\par
\tab var fretboard = new function ( )\par
\tab\{\par
\tab\tab this.fillMarkerRows = new function ( table )\par
\tab\tab\{\par
\tab\tab\tab\cf6 // if ( table == null ) return;\par
\cf5\tab\tab\tab if ( \cf7 table\cf5 .markers != null && \cf7 table\cf5 .markers.length > 0 ) \par
\tab\tab\tab\{\par
\tab\tab\tab\tab var markerrow = table.rows[ 0 ];\par
\tab\tab\tab\}\par
\tab\tab\}\par
\tab\}\par
\}\cf0\f0\fs22\par
\pard\li142\sa200\sl276\slmult1\par
When the method is parsed for loading, the table null reference causes a run time error. If the commented guard instruction is enabled, the code loads fine.\par
\par
}
 